<?php

/**
 * Permite hacer operaciones con la tabla multa y tipomulta de la base
 * de catos
 * @package simertweb 
 * @subpackage models 
 * @category Administración
 * @author Grecia Espinoza <mrcl2587@gmail.com>
 * @author Juan Maldonado  <jgmaldonadoj@gmail.com>
 * @version 1.0  
 */
class Manular_multas extends CI_Model {

    private $tb_multa = 'multa';

    public function __construct() {
        $this->load->database();
        $this->load->model('mhistorico');
        $this->load->model('mpersona');
        $this->load->model('mempleado');
        $this->load->model('mpersonal_operativo');
        $this->load->model('mzona');
        $this->load->model('mmultas');
    }

    function getNumMultas() {
        return $this->db->count_all($this->tb_multa);
    }

    //Recibe como parametro el id de una multa y devuelve
    //un array con los ids correspondientes a los tipos
    // de multa que la multa contenga 
    function obtener_idtipomulta($idMulta) {
        $listaidtipomulta = array();
        $this->db->where('Multa_idMulta', $idMulta);
        $query = $this->db->get('tipomulta_has_multa')->result();
        foreach ($query as $obj) {
            $listaidtipomulta[] = $obj->TipoMulta_idTipoMulta;
        }
        return $listaidtipomulta;
    }

    /**
     * Obtiene todos los tipos de multa
     * @param type $listaidtipomulta es una lista que contiene los ids de los
     * tipos de multa
     * @return type array
     */
    function obtener_tipomultas($listaidtipomulta) {
        $listatipomulta = array();
        for ($i = 0; $i < count($listaidtipomulta); $i++) {
            $this->db->where('idTipoMulta', $listaidtipomulta[$i]);
            $query = $this->db->get('tipomulta')->result();
            foreach ($query as $obj) {
                $listatipomulta[] = $obj->razon;
            }
        }
        return $listatipomulta;
    }

    /**
     * Obtiene las multas no pagadas
     * @param type $fecInicio es la fecha de inicio de la búsqueda
     * @param type $fecFin es la fecha de finalización de un reporte
     * @return type array
     */
    function obtener_multa_nopagadas($fecInicio, $fecFin) {
        $this->db->where('fecha >=', $fecInicio);
        $this->db->where('fecha <=', $fecFin);
        $this->db->where('pagado', 0);
        $this->db->where('anulado', '0');
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Obtiene todas las multas no pagadas
     * @return type array
     */
    function obtener_multa_no_pagadas() {
        $this->db->where('pagado', 0);
        $this->db->where('anulado', '0');
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Obtiene las multas no pagadas con sus respectivos valores, el tipo de
     * multa y el valor a pagar
     * @param type $fecInicio es la fecha de inicio de la búsqueda
     * @param type $fecFin es la fecha de finalización de un reporte
     * @return array
     */
    function listar_multas_tipomultas($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_multa_nopagadas($fecInicio, $fecFin);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {

                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'controlador' => $controlador,
                    'tipo' => "nopagadas"
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista);
            }
        }
        return $listamultastipomulta;
    }

    /**
     * Obtiene todas las multas no pagadas
     * @return array
     */
    function listar_todas_no_pagadas() {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_multa_no_pagadas();
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {

                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'controlador' => $controlador,
                    'tipo' => "nopagadas"
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista);
            }
        }
//        var_dump($listaidtipomulta);
        return $listamultastipomulta;
    }

    //obtenemos todas las multas no pagadas a paginar con la función
    //total_posts_paginados pasando la cantidad por página y el segmento
    //como parámetros de la misma
    function total_paginados($por_pagina, $segmento) {
        $consulta = $this->db->get('multa', $por_pagina, $segmento);
        if ($consulta->num_rows() > 0) {
            foreach ($consulta->result() as $fila) {
                $data[] = $fila;
            }
            return $data;
        }
    }

    /**
     * Busca una multa no pagada ni anulada
     * @param type $codigomulta es el código de la multa emitida por el controlador
     * @return type array
     */
    function obtener_multas_buscadas($codigomulta) {
        $this->db->like('codigo', $codigomulta, 'after');
        $this->db->where('pagado', 0);
        $this->db->where('anulado', "0");
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Obtiene las multas buscadas con los tipos de multa que le corresponden a 
     * cada multa y respectivo monto a pagar
     * @param type $codigomulta es el código de la multa emitida por el controlador
     * @return array
     */
    function listar_multas_tipomultas_buscadas($codigomulta) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_multas_buscadas($codigomulta);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'hora' => $obj->hora,
                    'codigo' => $obj->codigo,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    /**
     * Anula una multa del sistema
     * @param type $listamultas es la multa seleccionada
     * @param type $justificacion es la justificación por la cual fue eliminada 
     * la multa
     */
    function anular_multas($listamultas, $justificacion) {
        date_default_timezone_set('America/Guayaquil');
        $fecha = date('Y-m-d');
        foreach ($listamultas as $id) {
            $data = array(
                'anulado' => strtoupper($justificacion),
                'fechaAnulado' => $fecha
            );
            $this->db->where('idMulta', $id);
            $this->db->update('multa', $data);
        }
        $this->mhistorico->guardar_acceso($_POST['listamultas'][0], "Multa anulada");
    }

    /**
     * Obtine todas las multas
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return type array
     */
    function obtener_todas_multas($fecInicio, $fecFin) {
        $query = $this->db->get('multa');
        return $query->result();
    }

    function obtener_todas_multas2($fecInicio, $fecFin) {
        $this->db->where('fecha >=', $fecInicio);
        $this->db->where('fecha <=', $fecFin);
        $query = $this->db->get('multa');
        return $query->result();
    }

    function obtener_por_controlador($fecInicio, $fecFin) {
        $idPersona = $this->mpersona->obtener_id2(substr($_POST['multas'], 12));
        $idEmpleado = $this->mempleado->obtener_ide($idPersona);
        $idControlador = $this->mpersonal_operativo->obtener_idControlador2($idEmpleado);
        $this->db->where('fecha >=', $fecInicio);
        $this->db->where('fecha <=', $fecFin);
        $this->db->where('Controlador_idControlador', $idControlador);
        $query = $this->db->get('multa');
        return $query->result();
    }

    function obtener_por_tipomulta($fecInicio, $fecFin) {
        $idTipoMulta = $this->mmultas->obtener_id_multa($_POST['multas']);
        $this->db->where('TipoMulta_idTipoMulta', $idTipoMulta);
        $idMultas = $this->db->get('tipomulta_has_multa')->result();
        //var_dump($idMultas);
        if (empty($idMultas)) {
            return array();
        } else {
            foreach ($idMultas as $value) {
                $this->db->or_where('idMulta', $value->Multa_idMulta);
            $this->db->where('fecha >=', $fecInicio);
            $this->db->where('fecha <=', $fecFin);
            }

            $query = $this->db->get('multa');
            return $query->result();
        }
    }

    function obtener_por_zonas($fecInicio, $fecFin) {
        $idZona = $this->mzona->indice(substr($_POST['multas'], 5));

        $this->db->where('fecha >=', $fecInicio);
        $this->db->where('fecha <=', $fecFin);
        $this->db->where('Subcalle_idZona', $idZona);
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Lista todas las multas con su tipo de multa y con el costo
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return array
     */
    function listar_todas_multas($fecInicio, $fecFin) {

        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_todas_multas2($fecInicio, $fecFin);

        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => "todas"
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    /**
     * Obteniene la lista de multas anuladas
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return type array
     */
    function obtener_multas_anuladas($fecInicio, $fecFin) {
        $this->db->where('fechaAnulado >=', $fecInicio);
        $this->db->where('fechaAnulado <=', $fecFin);
        $this->db->where('anulado !=', "0");
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Devuelve la lista de multas anuladas con el tipo de la multa y su costo
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return array
     */
    function listar_multas_anuladas($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_multas_anuladas($fecInicio, $fecFin);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => "anuladas",
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    /**
     * Obtiene la lista de multas pagadas
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return type array
     */
    function obtener_multas_pagadas($fecInicio, $fecFin) {
        $this->db->where('fechaPago >=', $fecInicio);
        $this->db->where('fechaPago <=', $fecFin);
        $this->db->where('pagado', 1);
        $query = $this->db->get('multa');
        return $query->result();
    }

    /**
     * Obtiene la lista de multas pagadas
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return type array
     */
    function obtener_tipo_multas() {
        $this->db->where('habilitado', 1);
        $query = $this->db->get('tipomulta');
        return $query->result();
    }

    /**
     * Devuelve la lista de multas pagadas con el tipo de la multa y su costo
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return array
     */
    function listar_multas_pagadas($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_multas_pagadas($fecInicio, $fecFin);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => "pagadas",
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    /**
     * Lista todas las multas con su tipo de multa y con el costo
     * @param type $fecInicio es la fecha de inicio del reporte
     * @param type $fecFin es la fecha de finalización del reporte
     * @return array
     */
    function listar_por_zonas($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_por_zonas($fecInicio, $fecFin);

        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => 'zona',
                    'tipo1' => $_POST['multas']
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    function listar_por_controlador($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_por_controlador($fecInicio, $fecFin);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => 'controlador',
                    'tipo1' => $_POST['multas']
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

    function listar_por_tipomulta($fecInicio, $fecFin) {
        $tipos = "";
        $listamultastipomulta = array();
        $listamultas = $this->obtener_por_tipomulta($fecInicio, $fecFin);
        foreach ($listamultas as $obj) {
            $listaidtipomulta = $this->obtener_idtipomulta($obj->idMulta);
            $tipomultas = $this->obtener_tipomultas($listaidtipomulta);
            for ($i = 0; $i < count($tipomultas); $i++) {
                $tipos = $tipomultas[$i] . ", " . $tipos;
            }
            $controlador = $this->mpersonal_operativo->obtener_persona_controlador($obj->Controlador_idControlador);
            if ($tipos != "") {
                $lista = array(
                    'id' => $obj->idMulta,
                    'fecha' => $obj->fecha,
                    'codigo' => $obj->codigo,
                    'hora' => $obj->hora,
                    'usuario' => $obj->usuario,
                    'placa' => $obj->placa,
                    'razon' => $tipos,
                    'monto' => $obj->monto,
                    'anulado' => $obj->anulado,
                    'pagado' => $obj->pagado,
                    'controlador' => $controlador,
                    'tipo' => 'tipomulta',
                    'tipo1' => $_POST['multas']
                );
                $tipos = "";
                array_push($listamultastipomulta, $lista); //agrega elementos a un array multidimensional
            }
        }
        return $listamultastipomulta;
    }

}

?>
